/* APP 更新组件 */
import { mainColor } from '@/config/index.js'
function updata(url, cancelFun) {
	// #ifdef APP-PLUS
	let alphaBg = new plus.nativeObj.View("alphaBg", {  // 添加遮罩
		top: '0px',
		left: '0px',
		height: '100%',
		width: '100%',
		backgroundColor: 'rgba(0,0,0,0.5)'
	});
	let screenWidth = plus.screen.resolutionWidth;  // 屏幕宽度
	let screenHeight = plus.screen.resolutionHeight; // 屏幕高度
	let updataH = 200;  // 升级框高度
	let updataW = screenWidth * 0.9;  // 升级框宽度
	let updataL = screenWidth * 0.05;  // 升级框 left
	let updataT = (screenHeight - updataH) / 2;   // 升级框 top
	let updataBtnW = updataW * 0.9;    // 取消按钮 宽度
	let updataBtnL = updataW * 0.05;    // 取消按钮 left
	let updataBox = new plus.nativeObj.View("updataBox", {  // 添加升级框
		top: updataT + 'px',
		left: updataL + 'px',
		height: updataH + 'px',
		width: updataW + 'px',
		backgroundColor: 'rgba(255,255,255, 0)'
	});
	updataBox.draw([
		{
			tag: 'rect',  // 背景颜色（在样式里无法添加圆角，所有放在里面了）
			id: 'updataBg',
			color: '#FFFFFF',
			rectStyles: {
				radius: '8px'
			},
			position: {
				top: '0px',
				height: '100%'
			}
		},
		{
			tag: 'font',   // 标题
			id: 'updataTitle',
			text: '正在更新',
			textStyles: {
				size: '24px'
			},
			position: {
				top: '10px',
				height: '44px'
			}
		},
		{
			tag: 'rect',  // 取消按钮
			id: 'updataBtnBg',
			color: mainColor,
			rectStyles: {
				radius: '5px'
			},
			position: {
				bottom: '20px',
				left: updataBtnL + 'px',
				height: '44px',
				width: updataBtnW + 'px',
			}
		},
		{
			tag: 'font',   // 取消文字
			id: 'updataBtn',
			text: '取消并退出',
			textStyles: {
				size: '20px',
				color: '#fff'
			},
			position: {
				bottom: '20px',
				height: '44px'
			}
		},
		{
			tag: 'rect',   // 进度条背景
			id: 'progressBox',
			color: '#CCC',
			rectStyles: {
				radius: '8px'
			},
			position: {
				bottom: '120px',
				left: updataBtnL + 'px',
				height: '8px',
				width: updataBtnW + 'px',
			}
		},
		{
			tag: 'rect',   // 进度条
			id: 'progressBoxBg',
			color: mainColor,
			rectStyles: {
				radius: '8px'
			},
			position: {
				bottom: '120px',
				left: updataBtnL + 'px',
				height: '8px',
				width: '0px',
			}
		},
		{
			tag: 'font',   // 进度
			id: 'progressText',
			text: '0%',
			textStyles: {
				size: '20px',
				color: '#000'
			},
			position: {
				top: '85px',
				height: '44px'
			}
		},
	]);
	alphaBg.show();
	updataBox.show();
	
	let downOk = false;  // 是否下载完成
	let downUrl = '';   // 本地地址
	
	
	// 清理历史下载
	try{
		plus.io.requestFileSystem(plus.io.PRIVATE_DOC, (fs) => {
			fs.root.createReader().readEntries(entry => {
				for(let i = 0; i < entry.length; i++) { 
					if(~entry[i].name.indexOf('uniapp_temp_')) {
						entry[i].removeRecursively();
					}
				}
			});
		});
	} catch(err) {}
	
	// 开始下载
	const downloadTask = uni.downloadFile({
		url: url,
		success: (res) => {
			if (res.statusCode === 200) {
				downOk = true;
				downUrl = res.tempFilePath;
				updataBox.draw([  // 将取消按钮改为安装按钮（防止用户误取消）
					{
						tag: 'font',
						id: 'updataBtn',
						text: '安装',
						textStyles: {
							size: '20px',
							color: '#fff'
						},
						position: {
							bottom: '20px',
							height: '44px'
						}
					}
				]);
				plus.runtime.install(downUrl, {force: true});  // 自动安装
			}
		}
	});
	
	downloadTask.onProgressUpdate((res) => {  // 进度监听
			let p = res.progress;
			updataBox.draw([ // 更新进度
				{
					tag: 'rect',
					id: 'progressBoxBg', 
					color: mainColor,
					rectStyles: {
						radius: '8px'
					},
					position: {
						bottom: '120px',
						left: updataBtnL + 'px',
						height: '8px',
						width: updataBtnW*(p/100) + 'px',
					}
				},
				{
					tag: 'font',
					id: 'progressText',
					text: p + '%',
					textStyles: {
						size: '20px',
						color: '#000'
					},
					position: {
						top: '85px',
						height: '44px'
					}
				},
			]);
	});
	
	// 监听取消按钮点击
	updataBox.addEventListener('click', e => {
		if(e.screenX > updataL + updataBtnL && e.screenX < screenWidth - updataL - updataBtnL && e.screenY > updataT + updataH - 64 && e.screenY < updataT + updataH - 20) {
			if(downOk) { // 已经下载完成，点击安装
				plus.runtime.install(downUrl, {force: true});
			} else {  // 未下载完成，执行传进来的函数， 会回传 （遮罩、升级框、下载） 对象
				if(typeof cancelFun == 'function') {
					cancelFun(alphaBg, updataBox, downloadTask);
				}
			}
		}
	});
	
	// #endif
}
export default updata;